
1、定义---

    面向对象就是一种编程思想，是相对于面向过程来说的，

2、与面向过程的对比---

    面向过程是指，分析出问题解决的步骤，然后用函数将步骤一步一步的实现，使用的时候一个一个的调用，他更关注的是过程
    面向对象则不关心解决问题的步骤，更注重结果，就比如我们想看电视，面向对象就是拿出遥控器直接把他打开，而不关系他是怎么开开的间要经过多少个电路

3、三大特点

    面向对象有三大特点，封装、继承、多态
     1〉 封装
        就是将他一系列的操作步骤 封装在函数的内部，隐藏细节，但是会暴露出一个接口，让我们来操作他，这样做的好处是安全，而且易于维护

    2〉 继承
        
        继承就是子类继承父类的所有方法和属性，目的是为了复用，并且还可以拓展只属于子类的方法和属性

        但是在es5中并没有类的概念，所以我们通常用构造函数和原型来模拟类实现继承
        Es6中才拓展了类的概念，我们可以直接使用class关键字来定义类，用extends关键字来继承类，注意子类必须要执行super()方法，否则会报错
        <!-- 注：在 constructor 中必须调用 super 方法，因为子类没有自己的 this 对象，而是继承父类的 this 对象，然后对其进行加工,而 super 就代表了父类的构造函数。super 虽然代表了父类 A 的构造函数，但是返回的是子类 B 的实例，即 super 内部的 this 指的是 B，因此 super() 在这里相当于 ```A.prototype.constructor.call(this, props)``。 -->

    3〉 多态性
        由于在前端领域内是不存在多态的所以我对多态的理解仅在于
        多态指  接口的多种不同的实现方式，
                目的就是实现接口重用。

4、应用场景
    一般用于操作复杂重复性强的代码
    在工作中做过，轮播图，弹框，购物车这类的

5、关于继承
    原型继承、构造函数继承、组合式继承

    原型继承，将子类的原型指向父类的实例，可以访问原型中的方法，但是不能访问构造函数中的属性
    构造函数式继承， 在子类的构造函数中执行父类构造函数，然后用call,apply方法将this指向子类
        可以访问父类的属性，但是不能访问父类的原型
    在工作中我们一般用组合式继承，即可以访问父类的属性，也可以访问父类的原型，但是原型上会多出一些不必要的属性

    

     